Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.08.2013, 13:51
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

При кодировке "windows-1251" по каким правилам кодируются нелатинские в форме ?
При кодировке "windows-1251" по каким правилам сериализуются данные в форме ?

Хочу сделать get - поисковый запрос
<form method="get" action="/search.php?action" >
<input name="keywords" value="###3;AББ-1###" /> // Красным - русские
</form>
Цитата:
так вот чисто из формы
"/search.php?action=search&keywords=%23%23%233%3BA%C1%C1-1%23%23%23"
Цитата:
Если сериализую через encodeURIComponent
"/search.php?action=search&keywords=%23%23%233%3BA%D0%91%D0%91-1%23%23%23"
Самодельный запрос не проходит

Последний раз редактировалось Deff, 14.08.2013 в 14:06.
Ответить с цитированием
  #2 (permalink)  
Старый 14.08.2013, 14:13
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219


Подстановка в форму атрибута enctype="application/x-www-form-urlencoded" - не влияет!
Ответить с цитированием
  #3 (permalink)  
Старый 14.08.2013, 14:20
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Deff
Подстановка в форму атрибута enctype="application/x-www-form-urlencoded" - не влияет!
Так это дефолтное значение атрибута. С чего бы это подстановка того же самого значение на что-то влияла?

alert(document.createElement('form').enctype);
Ответить с цитированием
  #4 (permalink)  
Старый 14.08.2013, 14:22
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Deff
При кодировке "windows-1251"
Зачем эта древняя кодировка, когда есть универсальная, везде поддерживаемая (кроме корявого PHP с хромающей ненативной поддержкой) utf-8?
Ответить с цитированием
  #5 (permalink)  
Старый 14.08.2013, 14:25
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

danik.js,
я не могу влиять на страницу
Ответить с цитированием
  #6 (permalink)  
Старый 14.08.2013, 14:50
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Deff
При кодировке "windows-1251" по каким правилам сериализуются данные в форме ?
Каждый байт текста кодируется знаком % и последующим значением байта в шестнадцатеричном формате.

"Б" в win1251 кодируется числом 193, которое в hex-представлении выглядит как C1
Ответить с цитированием
  #7 (permalink)  
Старый 14.08.2013, 14:52
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Вроде нашёл ответ тут => http://jqbook.net.ru/ajax/ajax_win1251.htm

Реализовал наподобие - функцией encodeURIwin125
var transAnsiAjaxSys = [];
for (var i = 0x410; i <= 0x44F; i++)
  transAnsiAjaxSys[i] = i - 0x350; // А-Яа-я
transAnsiAjaxSys[0x401] = 0xA8;    // Ё
transAnsiAjaxSys[0x451] = 0xB8;    // ё

window.encodeURIwin125 = function(str)
{
  var ret = [];
  // Составляем массив кодов символов, попутно переводим кириллицу
  for (var i = 0; i < str.length; i++)
  {
    var n = str.charCodeAt(i);
    if (typeof transAnsiAjaxSys[n] != 'undefined')
      n = transAnsiAjaxSys[n];
    if (n <= 0xFF)
      ret.push(n);
  }
  return escape(String.fromCharCode.apply(null, ret));
}
alert(encodeURIwin125('###3;AББ-1###'))

----------------------------------------
PS: При "windows-1251" и для POST cитуация c кодингом аналогичная, при использовании типовых функций jQuery решение по ссылке в исходнике (при использовании FormData(), подобных проблем вроде не возникает)

Последний раз редактировалось Deff, 14.08.2013 в 18:21.
Ответить с цитированием
  #8 (permalink)  
Старый 14.08.2013, 15:24
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

В смысле? Чет я не нашел там ответа на поставленный вопрос:
Сообщение от Deff
При кодировке "windows-1251" по каким правилам сериализуются данные в форме ?
И что делает этот код?
Ответить с цитированием
  #9 (permalink)  
Старый 14.08.2013, 15:29
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

А, все разобрался. Тебе нужна была реализация uri-кодирования строки, аналогичная встроенной при отправке формы.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск